package com.huo.designmode.simpleFactory;

/**
 * 通过专门创建一个类，来获取其他类的实例
 * 直接从工厂里来拿吧，我给你创建好了
 */
public class FactoryFruit {

    public static Fruit getApple(){
        //获取Apple类的实例
        return new Apple();//它负责实现和创建所有实例的内部逻辑
    }

    public static Fruit getBanana(){
        //获取Banana类的实例
        return new Banana();
    }

    /**
     *方法2：一般使用这种
     * 使用改进之后的方法，上面的两个方法可以注释掉
     */
    public static Fruit getFruit(String fruiType) throws IllegalAccessException, InstantiationException {
        if(fruiType.equalsIgnoreCase( "apple" )){
            return Apple.class.newInstance();
        }else if (fruiType.equalsIgnoreCase( "banana" )){
            return Banana.class.newInstance();
        }else {
            System.out.println("找不到相应的实例化类");
            return null;
        }
    }

    /**
     * 改进方法3
     * @param classType
     * @return
     * @throws IllegalAccessException
     * @throws InstantiationException
     * @throws ClassNotFoundException
     */
    public static Fruit getFruit3(String classType) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        Class fruit = Class.forName( classType );
        return (Fruit) fruit.newInstance();
    }
}
